package com.color.admin.system.servie;

import com.color.admin.common.core.base.BaseService;
import com.color.admin.common.core.page.PageRequest;
import com.color.admin.common.core.page.PageResponse;
import com.color.admin.system.entity.SysDept;
import com.color.admin.system.entity.query.DeptQueryCriteria;
import com.color.admin.system.entity.vo.dept.DeptTreeVo;
import com.color.admin.system.entity.vo.dept.DeptVo;

import java.util.List;
import java.util.Set;

/**
 * @author HaiQiu
 */
public interface DeptService extends BaseService<SysDept,SysDept, Set<String>,
        String,SysDept, PageRequest<DeptQueryCriteria>, PageResponse<DeptVo>> {

    /**
     * 查询所有部门
     * @return 查询所有部门
     */
    List<SysDept> deptAll();

    /**
     * 查询树形结构所有部门
     * @return 树形结构所有部门
     */
    List<DeptTreeVo> tree();

    /**
     * 根据父级ID查询子集和本身
     * @return 根据父级ID查询子集和本身
     * @param pid 父级ID
     */
    List<SysDept> findAllByPid(String pid);

    /**
     * 分页查询
     * @param sysDeptPageRequest 部门分页模糊查询参数
     * @return 部门集合
     */
    @Override
    PageResponse<DeptVo> list(PageRequest<DeptQueryCriteria> sysDeptPageRequest);

    /**
     * 新增并返回新增数据
     * @param sysDept 参数
     * @return 返回信息
     */
    SysDept saveRes(SysDept sysDept);

    /**
     * 修改并返回修改数据
     * @param sysDept 参数
     * @return 返回信息
     */
    SysDept updateRes(SysDept sysDept);
}
